string="一段文字比较长";根据关键字(字比)查找,所在的位置?

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:58:31
string="一段文字比较长";根据关键字(字比)查找所在string的位置?

我们将这个一段文字建立成树,或者其它的一种算法来取 (字比)在string当中的位置? 这个如果不用函数可能比较复杂,或者说你给个思路也可以啊!
string="我们将这个一段文字建立成树,或者其它的一种算法来取 (字比)在string当中的位置? 这个如果不用函数可能比较复杂,或者说你给个思路也可以啊!我们将这个一段文字建立成树,或者其它的一种算法来取 (字比)在string当中的位置? 这个如果不用函数可能比较复杂,或者说你给个思路也可以啊!";

我们给个关键字(关键字可以是一个,二个,三个,四个,五个),根据关键字来找到sring里面的对应的位置,用什么方法来实现呢?

用下面的函数就可以完成, 如果找到就返回子串在主串的中的偏移量, 如果找不到或是参数错误就返回 -1.

int FindSubString(const char *pcMainString, const char *pcSubString)
{
if ((NULL == pcMainString) || (NULL == pcSubString))
{
return -1;
}
int i = 0;
int j = 0;
int nLenMain = strlen(pcMainString);
int nLenSub = strlen(pcSubString);

if (nLenSub > nLenMain)
{
return -1;
}
while ((i < nLenMain) && (j < nLenSub))
{
if (pcMainString[i] == pcSubString[j])
{
++i;
++j;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == nLenSub)
{
return i - j;
}
else
{
return -1;
}
}

如果主串很长很长, 子串中有重复序列, 那么建议使用 KMP 匹配算法, 楼主可以去查数据结构的相关资料.

w恕我问问,这用树干什么? 一段文字比较长,什么形式的、一般的就只能用顺序查找了,其他可能会用二分法